package game.examples;

import game.Coordinate;
import game.Entity2D;
import game.Spawner2D;
import game.examples.newEntityCreation.ThreadBasedMob;
import graphic.GameView;
import graphic.render.Render2D;

import java.awt.event.KeyListener;
import java.awt.event.MouseListener;

import utils.TestMouseListener;

/**
 * Classe di esempio per la creazione di una nuova modalita'.
 * @author Jan
 *
 */
public class GameModeExample extends GameView {
	
	
	private static final long serialVersionUID = 1462165010746973723L;
	
	//Di supporto, per non creare continuamente nuove variabili in memoria.
	private Spawner2D spawner;
	private Entity2D testEntity;
	
	//Contenitore per le entita' temporanee.
	private Entity2D[] entities;
	
	/**
	 * Costruttore modalita'
	 */
	public GameModeExample(Render2D render) {
		super(render);
		
		//Definizione di quali entita' sono richieste per madalita'
		
		//Entita' interattiva.
		testEntity = new ThreadBasedMob(1, new Coordinate(250, 250, 0), 0);
		
		TestMouseListener mouse = new TestMouseListener(testEntity);
		addMouseMotionListener(mouse);
		
		//Specificare qual'e' lo spawner da utilizzare!!!
		spawner = new SpawnerExample(200, 200, getWidth(), getHeight());
		addKeyListener((KeyListener) spawner);
		addMouseListener((MouseListener) spawner);
		
	}
	
	//Definizione di quali entita' devono essere renderizzare.
	@Override
	public void tick(Render2D renderScreen) {
		renderScreen.cleanRenderArea();
		entities = spawner.cloneActalEntityBuffer();
		renderScreen.centredRender( entities );
		renderScreen.centredRender( testEntity );
	}

}
